package 面向对象高级.抽象类和抽象方法;

public class TemplateMethodTest {
    public static void main(String[] args) {
//        BankTemplateMethod method1=new DrawMoney;
//        method1.process();
//
//        BankTemplateMethod method2=new DrawMoney;
//        method2.process();
    }
}

abstract class BankTemplateMethod{
    //第一步
    public void takeNumber(){
        System.out.println("取号排队");
    }

    //第二步
    public abstract void transact();

    //第三步
    public void evaluate(){
        System.out.println("反馈评分");
    }

    //模板的方法不能够被进行重写
    public final void process(){
        takeNumber();
        transact();
        evaluate();
    }
}

class DrawMoney extends BankTemplateMethod{
    @Override
    public void transact() {
        System.out.println("我要取款");
    }
}

class ManageMoney extends BankTemplateMethod{
    @Override
    public void transact() {
        System.out.println("我要理财，我有2000万美元");
    }
}

